import { ComponentInternalInstance } from '@vue/runtime-core';

/**
 * 自定义 Hook: 使用 uni.createSelectorQuery 查询元素信息
 * @param selector 元素选择器 (id 或 class)
 * @param context 可选的组件实例 (用于在组件中查找元素)
 * @returns 返回一个 Promise，解析为元素信息
 */
export function useSelectorQuery(selector: string, context: ComponentInternalInstance | null): Promise<UniApp.NodeInfo> {
  return new Promise((resolve, reject) => {
    const query = context ? uni.createSelectorQuery().in(context) : uni.createSelectorQuery();

    query
      .select(selector)
      .boundingClientRect((res) => {
        if (res) {
          if (!Array.isArray(res)) {
            resolve(res as UniApp.NodeInfo);
          } else {
            reject(new Error(`${selector} 有多个存在`));
          }
        } else {
          reject(new Error(`没找到${selector}元素`));
        }
      })
      .exec();
  });
}
